package com.closer.codebox.biz;


import cn.hutool.core.io.FileUtil;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.nio.charset.StandardCharsets;

/**
 * 代码沙箱通用方法
 *
 * @author closer
 */
@Slf4j
public class CommonTemplate {

    private static final String GLOBAL_CODE_DIR_NAME = "tmpCode";

    /**
     * 保存代码到文件
     *
     * @param code 用户代码
     * @return  文件
     */
    public File saveCodeToFile(String code,String fileName,String type){
        var userDir = System.getProperty("user.dir");
        var globalCodePathName = userDir + File.separator + GLOBAL_CODE_DIR_NAME;
        if (!FileUtil.exist(globalCodePathName)){
            FileUtil.mkdir(globalCodePathName);
        }
        var userCodeParentPath = globalCodePathName + File.separator + type+ File.separator + System.currentTimeMillis();
        var userCodePath = userCodeParentPath + File.separator + fileName;

        return FileUtil.writeString(code,userCodePath, StandardCharsets.UTF_8);
    }

    /**
     * 清理临时文件
     *
     * @param file 代码文件
     */
    public void cleanTempFiles(File file) {
        if (file == null || !file.exists()) {
            return;
        }

        try {
            // 获取代码文件所在的父目录（时间戳目录）
            var parentDir = file.getParentFile();
            if (parentDir != null && parentDir.exists()) {
                // 删除整个时间戳目录（包含源代码和编译后的class文件）
                FileUtil.del(parentDir);
            }
        } catch (Exception e) {
            log.error("清理临时文件失败: {}", e.getMessage());
        }
    }

    /**
     * 获取临时文件目录
     */
    public File getTempFileParent(File file) {
        return file != null ? file.getParentFile() : null;
    }
}
